package lq1508;

import java.util.Scanner;

public class Main {
	// 棋盘大小
    static int N = 8;
    
    //总共有几个解
    static int res = 0;

    // 打印棋盘
    private static void print(int[][] board) {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                System.out.print(" " + board[i][j] + " ");
            }
            System.out.println();
        }
    }

    // 检查在board[row][col]放置皇后是否安全
    private static boolean check(int[][] board, int row, int col) {
        int i, j;

        // 检查当前列
        for (i = 0; i < row; i++) {
            if (board[i][col] == 1) {
                return false;
            }
        }

        // 检查左上对角线
        for (i = row, j = col; i >= 0 && j >= 0; i--, j--) {
            if (board[i][j] == 1) {
                return false;
            }
        }

        // 检查右上对角线
        for (i = row, j = col; i >= 0 && j < N; i--, j++) {
            if (board[i][j] == 1) {
                return false;
            }
        }

        return true;
    }

    // 递归解决八皇后问题，并打印所有解
    private static void dfs(int[][] board, int row) {
        // 如果所有皇后都放置好了，打印当前解
        if (row == N) {
        	//找到一个解
        	res++;
            //print(board);
            //System.out.println("---------------------------");
            return;
        }

        // 尝试在当前行的每一列放置皇后
        for (int col = 0; col < N; col++) {
            // 检查是否可以在board[row][col]放置皇后
            if (check(board, row, col)) {
                // 放置皇后
                board[row][col] = 1;

                // 递归放置剩下的皇后
                dfs(board, row + 1);

                // 回溯，移除皇后
                board[row][col] = 0;
            }
        }
    }

    
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		int[][] board = new int[N][N]; // 初始化棋盘
        dfs(board, 0); // 从第0行开始递归
        System.out.println(res);
	}

}
